﻿package tools;

import java.io.File;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;

/**
 * 使用Map进行操作的工具类，包括计数，排序，输出等
 * @author ljzhou
 * @version 1.1
 */
public class MapTools {
	
	/**
	 * 向一个map里加入新元素，如果该元素本来不存在，则改元素的count为1，如果已经存在，则将其计数+1
	 * @param map
	 * @param element
	 */
	public static void add(Map<String, Double> map, String element) {
		if (map.containsKey(element)) {
			map.put(element, map.get(element) + 1.0);
		} else {
			map.put(element, 1.0);
		}
	}

	/**
	 * 对一个(String, Integer)结构的map进行排序
	 * @param original
	 * @return
	 */
	public static TreeMap<Integer, String> sortMap(Map<String, Integer> original) {
		TreeMap<Integer, String> sorted = new TreeMap<Integer, String>();
		for (String str : original.keySet()) {
			int count = original.get(str);
			if (sorted.containsKey(count)) {
				sorted.put(count, sorted.get(count) + "\t\t" + str);
			} else {
				sorted.put(count, str);
			}
		}
		return sorted;
	}
	/**
	 * 对一个(String, Integer)结构的map进行排序
	 * @param original
	 * @return
	 */
	public static TreeMap<Integer, ArrayList<String>> sortMap(Map<String, Integer> original, Boolean allowMultiple) {
		TreeMap<Integer, ArrayList<String>> sorted = new TreeMap<>();
		for (String str : original.keySet()) {
			int count = original.get(str);
			if (sorted.containsKey(count)) {
				ArrayList<String> contents = sorted.get(count);
				contents.add(str);
			} else {
				ArrayList<String> contents = new ArrayList<>();
				contents.add(str);
				sorted.put(count, contents);
			}
		}
		return sorted;
	}
	
	/**
	 * 将TreeMap的内容输出到文件
	 * @param filename
	 * @param treemap
	 */
	public static void outputTreeMap(String filename, TreeMap<Integer, String> treemap) {
		File dir = (new File(filename)).getParentFile();
		if(!dir.exists()) {
			dir.mkdirs();
		}
		StringBuilder sb = new StringBuilder();
		
		for (int key : treemap.descendingKeySet()) {
			sb.append(key);
			sb.append("\t\t");
			sb.append(treemap.get(key));
			sb.append("\r\n");
		}
		
		FileWriterEnhance fw = new FileWriterEnhance(filename);
		fw.WriteToFile(sb.toString());
	}
	
	/**
	 * 将TreeMap的内容输出到一个字符串中，供进一步处理
	 * @param treemap
	 * @return
	 */
	public static String getTreeMapOutput(TreeMap<Integer, String> treemap) {
		StringBuilder sb = new StringBuilder();
		for (int key : treemap.descendingKeySet()) {
			sb.append(key + "\t\t" + treemap.get(key));
			sb.append("\r\n");
		}
		return sb.toString();
	}
}
